from django.db import models

# Create your models here.



class SStudents(models.Model):
    student_id = models.CharField(db_column='S_id', max_length=200, primary_key=True, null=False, unique=True)
    name = models.CharField(db_column='Name', max_length=200, null=True)
    # 真实姓名
    rname = models.CharField(db_column='really_name', null=False, max_length=200)
    # 定义限制内容(性别)
    SEX_CHOOSE = [
        ('男', '男'),
        ('女', '女')
    ]
    sex = models.CharField(default='男', choices=SEX_CHOOSE, verbose_name='性别', null=True, max_length=4)
    # 级别
    level = models.CharField(db_column='Level', null=True, max_length=200)
    birthday = models.DateField(db_column="Birthday", null=True)
        # 依次往下是电话， 籍贯， 邮箱
    phone = models.CharField(db_column='Phone', null=False, max_length=13)
    origin = models.CharField(db_column='Origin', null=False, max_length=200)
    mailbox = models.CharField(db_column='Mailbox', null=True, max_length=200)


    # 下面是学生的学生信息的模型
    # 毕业高中
    by_school = models.CharField(db_column='By_school', null=True, max_length=200)
    # 毕业院校邮政编码
    school_encode = models.CharField(db_column='School_id', null=True, max_length=200)
    # 入学时间
    hire = models.DateField(db_column='Hire', null=True)
    # 所属学院
    college = models.CharField(db_column='College', max_length=200, null=True, default='数学与计算机工程学院')
    # 所属班级
    of_class = models.ForeignKey('rootone.Class', on_delete=models.CASCADE, null=True, default=None)

    # 下面是家庭信息
    f_name = models.CharField(db_column='F_name', null=True, max_length=200)
    f_phone = models.CharField(db_column='F_phone', null=True, max_length=200)
    m_name = models.CharField(db_column='M_name', null=True, max_length=200)
    m_phone = models.CharField(db_column='M_phone', null=True, max_length=200)
    address = models.CharField(db_column='Address', null=True, max_length=200)

    class Meta:
        # managed 属性默认为 True，
        # 表示Django会负责创建、维护和更新数据库中的这张表。
        # 如果想手动控制这张表（例如，不让Django自动创建或迁移），可以将 managed 设置为 False。
        managed = True
        # 指定数据库表名 (db_table)：默认情况下，Django会根据应用名和模型名自动生成数据库表的名称，
        # 但是可以通过设置 db_table 属性来指定模型对应的实际数据库表名。
        # 例如，db_table = "Student" 表示该模型将映射到数据库中名为 Student 的表。
        db_table = "studentapp_sstudents"
        app_label = 'studentapp'


# 创建一对一关系表-学生账号密码表，考虑到电话的不安全性值和姓名的不唯一性，还是使用学号吧
class S_user(models.Model):
    # 默认主键为id
    # student_id 已经在 SStudents 模型中定义过了，不需要在 S_user 中再定义一遍。你只需要通过 OneToOneField 获取学生的学号即可。
    sstudent = models.OneToOneField('studentapp.SStudents', on_delete=models.CASCADE)
    password = models.CharField(db_column='Password', null=False, max_length=200)



class S_award(models.Model):
    award_id = models.CharField(db_column='Award_id', null=False, unique=True, max_length=200, primary_key=True)
    award_name = models.CharField(db_column='Award_name', null=False, max_length=300)
    award_unit = models.CharField(db_column='Award_unit', verbose_name='颁布奖项的单位，一般是学院', null=False, max_length=300)
    award_time = models.DateTimeField(verbose_name='颁奖时间，又教师设置',
                                      db_column='Award_time',
                                      null=False,
                                      max_length=300,
                                      auto_created=False)
    award_text = models.CharField(verbose_name='奖项的详细描述', null=False, max_length=1000)
    AWARD_LEVEL = [
        (1, '学生'),
        (2, '教师'),
    ]
    award_level = models.IntegerField(verbose_name='奖项所属对象，只有学生和老师，依次来实现单独获取学生或老师的奖项信息',
                                      null=True,
                                      choices=AWARD_LEVEL
                                      )

    # 新增外键字段，允许为空并设置默认值为 1
    root = models.ForeignKey(
        'rootone.Rootone_if',
        on_delete=models.PROTECT,
        null=True,  # 允许 NULL 值
        verbose_name='学院管理员的id'

    )

    created_at = models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, null=True, verbose_name='最后修改时间')

    exe_person = models.CharField(verbose_name='执行人', null=True, max_length=20)

    class Meta:
        db_table = 'studentapp_s_award'

class student_award_zj(models.Model):
    # ForeignKey 字段不需要也不支持 max_length 参数，这是 CharField 的属性。
    student_name = models.ForeignKey(
        SStudents,
        on_delete=models.CASCADE,
        verbose_name='外键连接学生信息表，当学生信息被删除时，此数据也被删除',
        null=True
    )
    student_award = models.ForeignKey(
        S_award,
        on_delete=models.CASCADE,
        verbose_name='外键连接奖项表，当奖项信息被删除时，此数据也被删除',
        null=True
    )
    com_teacher_name = models.ForeignKey(
        'teacherapp.Teacher',
        on_delete=models.PROTECT,
        verbose_name='外键链接老师表作为指导老师',
        null=True,
        related_name='com_teacher_name'
    )

    class Meta:
        db_table = 'studentapp_award_zj'


class mb_setting(models.Model):
    sstudents = models.OneToOneField('studentapp.SStudents',
                                  null=True, on_delete=models.CASCADE, verbose_name='外键连接，学生信息被删除时，此信息也被删除')
    mb_name1 = models.CharField(verbose_name='密保问题1', db_column='Mb_name1', max_length=200)
    mb_answer1 = models.CharField(verbose_name='密保答案1', db_column='Mb_answer1', max_length=200)

    mb_name2 = models.CharField(verbose_name='密保问题2', db_column='Mb_name2', max_length=200)
    mb_answer2 = models.CharField(verbose_name='密保答案2', db_column='Mb_answer2', max_length=200)

    mb_name3 = models.CharField(verbose_name='密保问题3', db_column='Mb_name3', max_length=200)
    mb_answer3 = models.CharField(verbose_name='密保答案3', db_column='Mb_answer3', max_length=200)




